#include <xdc/runtime/System.h>
#include "package/internal/List.xdc.h"

Void List_init( List_Desc* list )
{
    list->first = list->last = (List_Elem*)list;
}

Bool List_empty( List_Desc* list )
{
    return list->first == (List_Elem*)list ? TRUE : FALSE;
}

Ptr List_get( List_Desc* list )
{
    List_Elem* elem;

    elem = list->first;
    if ((list->first = elem->next) == (List_Elem*)list) {
        list->last = (List_Elem*)list;
    }

    return elem;
}

Void List_put( List_Desc* list, List_Elem* elem )
{
    list->last->next = elem;
    list->last = elem;
    elem->next = (List_Elem*)list;
}


Void List_print( List_Desc* list )
{
    List_Elem* elem;

    System_printf("list %p: ", list);

    for (elem = list->first; elem != (List_Elem*)list; elem = elem->next) {
        System_printf("%p ", elem);
    }

    System_printf("\n");

}
